package day_7_16;

import java.util.HashMap;
import java.util.Map;

public class Main2 {
    /**
     * 290. 单词规律
     * https://leetcode.cn/problems/word-pattern/description/?envType=study-plan-v2&envId=top-interview-150
     */
    public boolean wordPattern(String pattern, String s) {
        Map<Character,String> ch2str = new HashMap<>();
        Map<String,Character> str2ch = new HashMap<>();
        int m = s.length();
        int i = 0;
        for(int k = 0;k < pattern.length();k++) {
            char ch = pattern.charAt(k);
            if(i >= m) {
                return false;
            }
            int j = i;
            while(j < m && s.charAt(j) != ' ') {
                j++;
            }
            String str = s.substring(i,j);
            if(ch2str.containsKey(ch) && !str.equals(ch2str.get(ch)) ||
                    str2ch.containsKey(str) && str2ch.get(str) != ch) {
                return false;
            }
            ch2str.put(ch,str);
            str2ch.put(str,ch);
            i = j + 1;
        }
        // 不能直接返回 true
        // 需要进行判断，如果 i 位置大于等于 s 这个字符串的长度的时候，才能返回true
        // 否则可能出现的情况是 字符匹配的个数没有字符串的个数多，那么会推出循环，但是 s 这个字符串没有匹配完全，所以这里需要进行判断一下
        return i >= m;
    }
}
